package com.qdc.datacenters.enums;

import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

import java.util.Optional;
import java.util.stream.Stream;

/**
 * 会话存档消息类型枚举
 */
@SuppressWarnings("all")
@Getter
public enum ChatMsgTypeEnum {

    ERROR("error", "未识别消息类型"),
    /**
     * 文本消息
     */
    TEXT("text", "文本消息"),
    /**
     * 图片消息
     */
    IMAGE("image", "[图片]"),

    /**
     * 撤回消息
     */
    REVOKE("revoke", "撤回了一条消息"),
    /**
     * 同意会话聊天内容
     */
    AGREE("agree", "同意存档会话聊天内容"),
    /**
     * 不同意会话聊天内容
     */
    DISAGREE("disagree", "不同意存档会话聊天内容"),
    /**
     * 语音消息
     */
    VOICE("voice", "[语音]"),
    /**
     * 视频消息
     */
    VIDEO("video", "[视频]"),

    /**
     * 名片消息
     */
    CARD("card", "[名片]"),
    /**
     * 位置消息
     */
    LOCATION("location", "[位置]"),
    /**
     * 表情消息
     */
    emotion("emotion", "[动画表情]"),
    /**
     * 文件消息
     */
    FILE("file", "[文件]"),

    /**
     * 链接消息
     */
    LINK("link", "[链接]"),
    /**
     * 小程序消息
     */
    WEAPP("weapp", "[小程序]"),
    /**
     * 聊条记录消息
     */
    CHATRECORD("chatrecord", "[聊条记录]"),
    /**
     * 待办消息
     */
    TODO("todo", "[待办消息]"),
    /**
     * 投票消息
     */
    VOTE("vote", "[投票消息]"),
    /**
     * 填表消息
     */
    COLLECT("collect", "[填表消息]"),
    /**
     * 红包消息
     */
    REDPACKET("redpacket", "[红包]"),
    /**
     * 会议邀请消息
     */
    meeting("meeting", "[会议邀请]"),

    /**
     * 切换企业消息
     */
    SWITCH_CORP("switch", "[切换企业]"),
    /**
     * 在线文档消息
     */
    DOCMSG("docmsg", "[在线文档]"),
    /**
     * markdown文档消息
     */
    MARKDOWN("markdown", "[markdown文档]"),
    /**
     * 图文消息
     */
    NEWS("news", "[图文]"),
    /**
     * 混合消息
     */
    MIXED("mixed", "[混合消息]"),
    /**
     * 音频存档消息
     */
    MEETING_VOICE_CALL("meeting_voice_call", "[音频存档]"),
    /**
     * 音频共享文档消息
     */
    VOIP_DOC_SHARE("voip_doc_share", "[音频共享文档]"),
    /**
     * 互通红包消息
     */
    EXTERNAL_REDPACKET("external_redpacket", "[互通红包]"),

    /**
     * 视频号消息
     */
    SPHFEED("sphfeed", "[视频号]"),
    /**
     * 音视频通话
     */
    VOIPTEXT("voiptext", "[音视频通话]"),
    /**
     * 微盘文件
     */
    qydiskfile("qydiskfile", "[微盘文件]"),
    ;
    /**
     * 媒体类型
     */
    String name;

    /**
     * 数据值
     */
    String type;

    ChatMsgTypeEnum(String type, String name) {
        this.type = type;
        this.name = name;
    }

    public static Optional<ChatMsgTypeEnum> of(String type) {
        return Stream.of(values()).filter(s -> s.type.equals(type)).findFirst();
    }

    public static ChatMsgTypeEnum messageTypeOf(String name) {
        return Stream.of(values()).filter(s -> s.name.equals(name)).findFirst().get();
    }

    public static ChatMsgTypeEnum parseEnum(String type) {
        ChatMsgTypeEnum[] chatMsgTypeEnums = ChatMsgTypeEnum.values();
        for (int i = 0; i < chatMsgTypeEnums.length; i++) {
            if (StringUtils.equals(chatMsgTypeEnums[i].getType(),type)) {
                return chatMsgTypeEnums[i];
            }
        }
        return ChatMsgTypeEnum.ERROR;
    }

}
